// 对于axios做一些基础的封装
// 封装的模式类似 不挑项目

// 1. 使用create方法实例化 axios.create()
// 1. baseURL 2.接口超时

// 2. 请求拦截器
// 拿到token 注入到request  headers
// 因为很多接口都需要用这个token 统一注入

// 3. 响应拦截器
// 1. token失效 401 跳转登录
// 2. 人资 后端它不是以正常的http 200作为接口成功的标识 而是以一个自定义的字段
// success: true
// if(response.suceess){ return respose } else(return Promise.reject(error))

// 3. 无感知切换token(优化层面的东西不是必须的)
import axios from 'axios'
// baseURL 超时时间配置
const instance = axios.create({
  baseURL: 'http://pcapi-xiaotuxian-front-devtest.itheima.net',
  timeout: 10000
})

// 全局注入token
instance.interceptors.request.use(config => {
  return config
}, e => Promise.reject(e))

// 处理返回数据 token失效跳回到登录页
instance.interceptors.response.use(
  (response) => {
    return response
  },
  (error) => {
    return Promise.reject(error)
  }
)

// 封装一个函数 用来适配 get/post请求的参数

// params  data

// 目的：只要用户传入get或者是post请求方法 函数自动把对应的接口参数放到正确的位置上去

// url:接口地址
// method:接口方法
// reqData:Obj 接口参数
function request (url, method, reqData) {
  return instance({
    url,
    method,
    // 这个地方的key不是固定的 由method决定
    // 对象的key 是可以写成[]语法的,在中括号中可以写js表达式
    // 兼容用户传入的method 忽略大小写
    [method.toUpperCase() === 'GET' ? 'params' : 'data']: reqData
  })
}

export default request
